package com.ff.xyh.feign.client.post;

import com.ff.xyh.common.entity.post.PostShop;
import com.ff.xyh.common.entity.post.PostTravel;
import com.ff.xyh.common.entity.result.ResultObject;
import com.ff.xyh.common.vo.post.PostShopVo;
import com.ff.xyh.common.vo.post.PostTravelVo;
import com.ff.xyh.common.qo.post.PostShopQuery;
import com.ff.xyh.common.qo.post.PostTravelQuery;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Auther FF
 * @Date 2022年 11月 15日
 * @Time 18:08
 */


//@FeignClient(value = "client-user-front") // 多个client直接指向同一个微服务会发生被注册的错误
// 指定 contextId(注册到bean容器的Id) 或 设置spring可以重复注册bean(不推荐)
@FeignClient(value = "service-post", contextId = "PostClient")
@RequestMapping("/post-service")
public interface PostClient {
    /**
     * 获取所有拼购帖
     * @return
     */
    @GetMapping("get-post-shop-all")
    ResultObject getAllPostShop () ;
    /**
     * 获取所有旅游帖
     * @return
     */
    @GetMapping("get-post-travel-all")
    ResultObject getAllPostTravel () ;

    /**
     * 分页查询 拼购贴 用于无条件查询拼购帖
     * @param currentPage 页数
     * @param size 页面大小
     * @return
     */
    @GetMapping("get-post-shop-page")
    ResultObject getPostShopPage (
            @RequestParam(name = "current") long currentPage,
            @RequestParam(name = "size") long size) ;

    /**
     * 分页查询 旅游帖
     * @param currentPage 页数
     * @param size 页面大小
     * @return
     */
    @GetMapping("get-post-travel-page")
    ResultObject getPostTravelPage (
            @RequestParam(name = "current") long currentPage,
            @RequestParam(name = "size") long size) ;

    /**
     * 根据用户id和帖子类型查询用户所有帖子
     * @param userId
     * @param type
     * @return
     */
    @GetMapping("get-post-user-type")
    ResultObject getPostByUserIdAndType(
            @RequestParam(name = "userId") String userId,
            @RequestParam(name = "type") int type) ;

    /**
     * 条件查询拼购帖 包含分页
     * @param postShopQuery
     * @return
     */
    @PostMapping("get-post-shop-condition")
    ResultObject getPostShopPageCondition(
            @RequestBody PostShopQuery postShopQuery) ;
    /**
     * 条件查询旅游帖 包含分页
     * @param postTravelQuery
     * @return
     */
    @PostMapping("get-post-travel-condition")
    ResultObject getPostTravelPageCondition(
            @RequestBody PostTravelQuery postTravelQuery) ;




    @GetMapping("get-post-shop-id")
    ResultObject getPostShopById(
            @RequestParam(name = "id") String id) ;

    @GetMapping("get-post-travel-id")
    ResultObject getPostTravelById(
            @RequestParam(name = "id") String id) ;


    @GetMapping("get-post-shop-ids")
    ResultObject getPostShopByIds(
            @RequestParam(name = "ids") List<String> ids) ;

    @GetMapping("get-post-travel-ids")
    ResultObject getPostTravelByIds(
            @RequestParam(name = "ids") List<String> ids) ;


//
//    /**
//     * 通过 id 和 type 查帖子
//     * @param id
//     * @return
//     */
//    @GetMapping("get-post-id-type")
//    ResultObject getPostByIdAndType (
//            @RequestParam(name = "id") String id,
//            @RequestParam(name = "type") int type) ;

    // TODO 添加购物贴 写入对应post_shop表 同时将照片集 写入post_img表 若开启群聊 则同时需要新建 post_room表数据
    // TODO 后期可以通过设置 是否开启群聊功能 收取服务费
    @PostMapping("insert-post-shop")
    ResultObject insertPostShop (
            @RequestBody PostShopVo postShopVo) ;
    // TODO
    @PostMapping("insert-post-travel")
    ResultObject insertPostTravel (
            @RequestBody PostTravelVo postTravelVo) ;

    @PostMapping("update-post-shop")
    ResultObject updatePostShop (
            @RequestBody PostShop postShop) ;

    @PostMapping("update-post-travel")
    ResultObject updatePostTravel (
            @RequestBody PostTravel postTravel) ;

    /**
     * 删除帖子 需要id和类型 通过消费者服务调用 调用前需要删除帖子保存的图片以及其他表相关信息
     * @param id
     * @param type
     * @return
     */
    @GetMapping("delete-post-id-type")
    ResultObject deletePostByIdAndType (
            @RequestParam(name = "id") String id,
            @RequestParam(name = "type") int type) ;



}
